/*
 * Phrase.h
 *
 *  Created on: Nov 18, 2012
 *      Author: m
 */

#ifndef PHRASE_H_
#define PHRASE_H_

#include <string>
#include <memory>

namespace physical
{

/**
 * Frase con texto, apellido del autor y nombre del autor.
 */
class Phrase
{
public:

    /**
     * Constructor por Defecto
     *
     * Construye una Frase con todos sus campos vacios
     *
     */
    Phrase();

    /**
     * Contructor por copia
     *
     * @param other El otro
     */
    Phrase( const Phrase& other );

    /**
     * Constructor Completo
     *
     * @param text El texto de la frase
     * @param authorSurname El apellido del autor de la frase
     * @param authorName El nombre del autor de la frase
     */
    Phrase( const std::string& text, const std::string& authorSurname, const std::string& authorName );

    /**
     * Destructor
     */
    virtual ~Phrase();

    /**
     * Devuelve el texto de la frase
     *
     * @return El texto
     */
    const std::string& getText() const;

    /**
     * Devuleve el apellido del autor de la frase
     *
     * @return El apellido del autor
     */
    const std::string& getAuthorSurname() const;

    /**
     * Devuleve el nombre del autor de la frase
     *
     * @return el nombre del autor
     */
    const std::string& getAuthorName() const;

    /**
     * Setea el texto de la frase
     *
     * @param text El nuevo texto de la frase
     */
    void setText( const std::string& text );

    /**
     * Setea el apellido del autor de la frase
     *
     * @param authorSurname el nuevo apellido del autor
     */
    void setAuthorSurname( const std::string& authorSurname );

    /**
     * Setea el nombre del autor de la frase
     *
     * @param authorName El nuevo nombre del autor
     */
    void setAuthorName( const std::string& authorName );

    /**
     * Operador de asignación
     *
     * @param rhs
     * @return
     */
    Phrase& operator =( const Phrase& rhs );

    /**
     * Operador de comparación por igualdad
     *
     * @param other la frase con el que se compara
     * @return true si es igual, false en caso contrario
     */
    bool operator ==( const Phrase& other ) const;

    /**
     * Operador de comparación por desigualdad
     *
     * @param other la frase con el que se compara
     * @return true si no es igual, false en caso contrario
     */
    bool operator !=( const Phrase& other ) const;

protected:
    std::string m_text;
    std::string m_authorSurname;
    std::string m_authorName;
};

} /* namespace physical */
#endif /* PHRASE_H_ */
